#ifndef ESCENARIO_H
#define	ESCENARIO_H

#include <vector>
#include "Actor.h"
#include "InfoMovimiento.h"
#include "Jugador.h"

using namespace std;
using namespace TP::Serializacion;
using namespace TP::Matematica;
using namespace TP::Juego;
using namespace TP::Juego::Arena;
using namespace TP::Juego::Arena::Utilidades;
using namespace TP::Juego::Arena::Actores;
using namespace TP::Juego::Motorizacion::Fisica;
using namespace TP::Juego::Motorizacion::Generadores;

namespace TP { namespace Juego { namespace Arena {

class Escenario: public ISerializable {
public:
    
    Escenario();

    Escenario(unsigned pAlto, unsigned pAncho, const string &rutaImagenFondo);

    ~Escenario();
    
    Actor* addActor (Actor* pActor, Posicion* pPosicion, Vector2D* pVelocidad,
        Vector2D* pAceleracion);
    
    Actor* getActorPorNombre (const string& pNombreActor);
    
    vector<Actor*>& getActores();
    
    Utilidad* addUtilidad (Utilidad* pUtilidad, Posicion* pPosicion);
    
    vector<Utilidad*>& getUtilidades ();
    
    Perimetro* getPerimetro();
    
    void getVectorPisos(vector<Piso*> &aEscribir);
    
    void liberar();
    
    Escenario* clonar();
    
    const string& getRutaImagenFondo() const;
    
    vector<struct InfoMov*>& getSemillasGeneradorPajaritos ();
    
    struct InfoMov* setSemillaGeneradorPajaritos(struct InfoMov* pSemilla);
    
    Utilidad* getCerditoAvatar();
    
    Utilidad* getCerditoAvatarPorJugador(Jugador* pJugador);

    virtual string aXML();
    
    virtual string aXML(const string& pPath);
    
    virtual void parseXML (const string& pDescriptor);
    
    virtual TiXmlElement* aElementoXML ();
    
    virtual void deElementoXML (TiXmlElement* pElemento);
    
private:
    vector<Actor*> _actores;
    vector<Utilidad*> _utilidades;
    Perimetro* _perimetro;
    string _ruta_imagen_fondo;
    vector<struct InfoMov*> _semillasGeneradorPajaritos;    
};
}}}

#endif	/* ESCENARIO_H */